前言:
- Istio大約在2018年開始開始受到關注主要原因也許是微服務k8s走向主流,這時就很需要一個可控制管理微服務中的流量監控安全兼顧的需求,此時Istio就是個很不錯的架構,正因為Istio慢慢開始廣為人使用Istio的版本也是飛快的更新這邊就來談談關於Istio更新
如何更新Istio與需要注意的事
-
關於更新Istio因為版本推進的很迅速自己本生也經歷了兩次版本的更新1.2.X版->1.4.2->1.5.1本生使用Istio都是使用helm部署有從helm2->helm3 k8s版本也是有很大的進展(使用GCP cluster)這邊來分享一下如何更版與遇到的問題
- 先來說說helm部分v2與v3最大的差異在於v3不需要在k8s上建立一個service-account tiller此目的是在helm Server 端建立一個可以部署的權限這邊也會牽扯到k8s的clusterrolebinding因為在1.5前版本Istio官方文件不建議使用helm v3但後期有解決此問題(但Istio也慢慢開始走向使用istioctl部署)
- 第二部分Istio的更新其實在Istio官方文件上提供滿簡單的方式作為更新步驟在1.5後Istio合併istiod前大致上資料結構沒有大大幅度的變動主要動作只需要更新istio-init istio這兩的本體透過helm install指令可以簡單的更新至對應版本,這邊需要注意的是更新完主體Istio後必須記得將所有pod做一個rollout動作使pod中的sidecar得以更新
- 最後是k8s版本這邊會牽扯到幾件事情如上述所說Istio的更新須伴隨著pod的重啟當k8s版本低於1.14前是沒有kubectl rollout restart deployment --namespace xxxx 指令可以使用,當對於有上百個微服務時會是一個很大的麻煩,這邊還有遇到k8s版本的第二個問題apiVersion因為GCP k8s版本的1.16.X版改駛用apiVersion V1這邊也是需要注意的地方(當然這點不屬於Istio更版影響範圍,只是更新服務遇到的小問題也提供參考~)
-
作為使用Helm更新的我來說,基本上跟換版本截至1.5.X以前大致架構都是一樣的,由於後期Istio採用了Istiod簡單來說合併了一些服務有產生較大的異動,這邊就先省略新架構下的更新方式,回歸正題如何更新Istio 1.5.X以前服務主要需要做的就是去官方網站下載當前版本專案:
curl -L https://istio.io/downloadIstio | sh -
export PATH=$PWD/bin:$PATH
istioctl version
- 更新完成後就可以做Istio核心部分的更新(當然若有設定過Istio內設定這邊也須在專案下載下來後做更動)
helm upgrade --install istio-init istio-init --namespace istio-system
kubectl -n istio-system wait --for=condition=complete job --all
helm upgrade istio istio --namespace istio-system -f ./istio/test-values.yaml
- 更新pod中的sidecar重啟服務 (k8s版本需大於1.14)
kubectl rollout restart deployment --namespace xxxx
kubectl rollout restart StatefulSet --namespace xxxx
結語:
- 來說一下Istio更新的結論如果使用helm更新需要注意的是helm版本更版後,需要記得服務的重啟已使得服務可以更版,更版服務需要注意k8s版本避免錯誤產生